return res;
}
+static void
+write_str(const char *str, gbfile *f)
+{
+ if (str && *str) {
+ int len = strlen(str);
+ if (len > 0xfe) {
+#if 0
+ if (len > 0x7fff) len = 0x7fff;
+ gbfputc((unsigned char) 0xff, f);
+ gbfputint16(len, f);
+#else
+ len = 0xfe;
+ gbfputc(len, f);
+#endif
+ }
+ else gbfputc(len, f);
+ gbfwrite(str, len, 1, f);
+ }
+ else gbfputc(0, f);
+}
static int
read_datum(gbfile *f)
queue *curr, *prev;
QUEUE_FOR_EACH(&trk->waypoint_list, curr, prev) count++;
}
- gbfputpstr(trk && trk->rte_name && *trk->rte_name ? trk->rte_name : "Name", fout);
+ write_str(trk && trk->rte_name && *trk->rte_name ? trk->rte_name : "Name", fout);
xasprintf(&cout, "%d trackpoints and %d waypoints", count, waypt_count());
- gbfputpstr(cout, fout);
+ write_str(cout, fout);
xfree(cout);
for (i = 3; i <= 8; i++) gbfputc(ZERO, fout);
- gbfputpstr("GPSBabel", fout);
+ write_str("GPSBabel", fout);
gbfputint32(count, fout);
if (count > 0) {
- gbfputpstr("WGS84", fout);
- gbfputpstr("WGS84", fout);
+ write_str("WGS84", fout);
+ write_str("WGS84", fout);
}
}
names = 1;
if (wpt->description && *wpt->description) names = 2;
gbfputint32(names, fout);
- if (names > 1) gbfputpstr(wpt->description, fout);
- gbfputpstr(wpt->shortname && *wpt->shortname ? wpt->shortname : "Name", fout);
+ if (names > 1) write_str(wpt->description, fout);
+ write_str(wpt->shortname && *wpt->shortname ? wpt->shortname : "Name", fout);
}
static void
write_header(NULL);
gbfputint32(waypt_count(), fout);
if (waypt_count() > 0) {
- gbfputpstr("WGS84", fout);
- gbfputpstr("WGS84", fout);
+ write_str("WGS84", fout);
+ write_str("WGS84", fout);
waypt_disp_all(wpt_cb);
}
}